package com.itheima.excel.listen;

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import org.springframework.beans.BeanUtils;
 
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
/**
 * @Author: zjh
 * @Description: 通用的监听，这样就不用一个模板一个监听了
 * @Date: Created in 2020/5/20 11:29
 * Modified by:
 */
public class CommonListen<T> extends AnalysisEventListener<T> {
    /**
     * 每隔5条存储数据库，实际使用中可以3000条，然后清理list ，方便内存回收
     */
    //模板对应的实体类
    private Class<T> tClass;
    private List<T> list = new ArrayList<T>();
    /**
     * 如果使用了spring,请使用这个构造方法。每次创建Listener的时候需要把spring管理的类传进来
     */
    public CommonListen(Class tClass) {
        this.tClass = tClass;
    }

    public CommonListen() {
    }

    @Override
    public void invoke(T t, AnalysisContext analysisContext) {
        list.add(t);
        //对象复制 -----这个地方是因为我们的项目是分布式项目，所以需要吧api层的实体类属性复制到sevice层
//        // ，如果不是分布式项目的话直接用t就可以
//        T newInstance = null;
//        try {
//            newInstance = tClass.newInstance();
//            BeanUtils.copyProperties(t, newInstance);
//            System.out.println("newInstance" + newInstance.toString());
//            list.add(newInstance);
//        } catch (InstantiationException e) {
//            e.printStackTrace();
//        } catch (IllegalAccessException e) {
//            e.printStackTrace();
//        }
    }
    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
        System.out.println("excel全部解析完毕后的收尾操作");
    }
    public List<T> getList() {
        return list;
    }
}
